home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 26
/
AACD 26.iso
/
AACD
/
Programming
/
AllPlaton
/
Unsorted
/
VFX.AMOS
/
VFX.amosSourceCode
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
AMOS Source Code
|
1995-11-01
|
39.5 KB
|
1,623 lines
' *************************************
' * *
' * VFX V0.0 *
' * Written by Chris Hodges *
' * *
' *************************************
'
Set Buffer 40
If Screen<>-1 Then Screen Close 0
'MXFILES=200
Dim FIL$(MXFILES)
Dim FB(60,4),FB$(60)
Global FB(),FB$()
TH=8
Global TH
Dim AC$(2),DI$(3),DIT(3,7)
FANI$="dh1:Blab/Test"
Gosub INIT
Gosub MAIN
End
MAIN:
Do
OMK=MK
Screen 0
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
If I$="" Then Multi Wait
BT=0
If YM=0 : I$=Cup$ : End If
If YM>84
If XM=0 : I$=Cleft$ : End If
If XM=638 : I$=Cright$ : End If
If YM=260 : I$=Cdown$ : End If
Else
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,25,59]
BT=Param
End If
End If
Exit If BT=25
If BT=26 Then Amos To Back
If BT=27 Then Gosub LOAIFF
If BT=28 Then Gosub LOABACKGROUND
If BT=29 Then Gosub VIEBACKGROUND
If BT=30 Then Gosub BACKTOMAIN
If BT=31 Then Gosub DELBACK
If BT=37 Then Gosub ENTNUMFRAMES
If BT=38 Then Add DI,1,0 To 3 : NEWTEX[BT,DI$(DI)]
If BT=39 Then Add ACCL,1,0 To 2 : NEWTEX[BT,AC$(ACCL)]
If BT=32 Then Gosub SELECTEFX
If BT=33 Then Gosub SETEFXPARAMS
If BT=34 Then Gosub PREVIEWANIM
If BT=35 Then Gosub MAKEANIM
If BT=36 Then Gosub ANIPLAYBACK
Loop
Return
INIT:
Degree
Screen Open 0,640,84,4,$8000
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display 0,128,40,320,84
Wait Vbl
Limit Mouse
FRMN=50 : DI=0 : ACCL=0
EFX=1
PIEX=10 : PIEY=10 : ZUF=0 : RAD=200
BASE=0
AC$(0)="@ Accelerate: no"
AC$(1)="@ Accelerate: >�"
AC$(2)="@ Accelerate: �<"
DI$(0)="@ Direction : ->"
DI$(1)="@ Direction : <-"
DI$(2)="@ Direction : <>"
DI$(3)="@ Direction : ><"
Gosub CREATEMAINSCREEN
Restore DITHER
For Y=0 To 7
For X=0 To 3
Read DIT(X,Y)
Next
Next
Return
CREATEMAINSCREEN:
Screen 0
Gr Writing 0
Cls 0
DEFCLOWIN[25,0,0]
TEXBOX[19,0,616,10,0,"VFX V0.0 by Chris Hodges."]
DEFSCRTBK[26,617,0]
FILBOX[0,11,639,83,0]
DEFTEX[27,4,13,84,23,"Load Iff",1]
DEFTEX[28,4,25,84,35,"Load Back",1]
DEFTEX[29,4,37,84,47,"View Back",1]
DEFTEX[30,4,49,84,59,"Back->Main",1]
DEFTEX[31,4,61,84,71,"Kill Back",1]
DEFTEX[32,87,13,214,23,"Choose Efx",1]
DEFTEX[33,87,25,214,35,"Change Args",1]
DEFTEX[34,87,37,214,47,"Preview Anim",1]
DEFTEX[35,87,49,214,59,"Save Anim",1]
DEFTEX[36,87,61,214,71,"Playback Anim",1]
DEFTEX[37,217,13,354,23,"Frames: "+ Extension_8_0EB8(FRMN,4),1]
DEFTEX[38,217,25,354,35,DI$(DI),1]
DEFTEX[39,217,37,354,47,AC$(ACCL),1]
DEFBOX[60,4,73,635,81,0]
DRAPROCBAR[60,1,1]
Return
SELECTEFX:
Do
If BASE=0 Then REQUEST["Select effect (1/2):","Explosion|Implosion|ScrollPageL|ScrollPageR|->"]
If BASE=1 Then REQUEST["Select effect (2/2):","ScrollPageU|ScrollPageD|Pixelize|Undefined|->"]
If Param=4 Then Add BASE,1,0 To 1 Else EFX=Param+1+BASE*4 : Exit
Loop
Gosub SETEFXPARAMS
Return
SETEFXPARAMS:
On EFX Gosub EXBLOSIONSET,EXBLOSIONSET,SCROLPAGESET,SCROLPAGESET,SCROLPAGESET,SCROLPAGESET,PIXELIZESET
Return
EXBLOSIONSET:
NUMENT["Enter number of pieces in X direction:","Ok",PIEX,0,250]
PIEX=Max(Val(Mid$(Param$,2)),1)
NUMENT["Enter number of pieces in Y direction:","Ok",PIEY,0,250]
PIEY=Max(Val(Mid$(Param$,2)),1)
NUMENT["Enter radius of explosion:","Ok",200,0,400]
RAD=Val(Mid$(Param$,2))
NUMENT["Enter randomizer percentage:","Ok",ZUF,0,100]
ZUF=Val(Mid$(Param$,2))
Return
SCROLPAGESET:
NUMENT["Enter delta height/width of page:","Ok",32,0,100]
RAD=Max(Val(Mid$(Param$,2)),8)
Return
PIXELIZESET:
NUMENT["Enter rotation radius:","Ok",4,0,32]
RAD=Val(Mid$(Param$,2))
Return
ENTNUMFRAMES:
NUMENT["Enter number of frames:","Accept|Cancel",FRMN,0,500]
A$=Param$
If Left$(A$,1)="0"
FRMN=Max(Val(Mid$(A$,2)),2)
NEWTEX[BT,"Frames: "+ Extension_8_0EB8(FRMN,4)]
End If
Return
PREVIEWANIM:
If MAINPIC=0 Then REQUEST["Load a main picture first!","Ok"] : Return
PREVIEW=1
Gosub CREATEANIM
Return
MAKEANIM:
If MAINPIC=0 Then REQUEST["Load a main picture first!","Ok"] : Return
PREVIEW=0 : BPIC=0
FILEREQ[-1,480,160,-1,"Enter base picture name", Extension_8_02F0(FANI$), Extension_8_03E0(FANI$),"","Ok","Abort","","PS"]
Screen 0 : Limit Mouse
If Param$="" Then Return
FANI$=Param$
If Exist(FANI$+"0000")
REQUEST["Overwrite old animation?","Overwrite|Append|Cancel"]
If Param=2 : Return : End If
If Param=0
PIC=0
Do
Exit If Exist(FANI$+ Extension_8_0EB8(PIC,4))=0
Trap Kill FANI$+ Extension_8_0EB8(PIC,4)
Inc PIC
Loop
End If
If Param=1
BPIC=0
Do
Exit If Exist(FANI$+ Extension_8_0EB8(BPIC,4))=0
Inc BPIC
Loop
End If
End If
Gosub CREATEANIM
Return
CREATEANIM:
Screen Hide 0 : Screen Hide 1
Screen Open 2,SCX,SCY,SCC,SCR
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
Screen Display 2,128,40,SCX,SCY
Get Palette 1
On EFX Gosub EXBLOSIONINIT,EXBLOSIONINIT,NI,NI,NI,NI,NI
ABORT=0 : PIC=0
If DI=0
For FC=0 To FRMN-1
Gosub CALCFRAME
Exit If ABORT
Next
End If
If DI=1
For FC=FRMN-1 To 0 Step -1
Gosub CALCFRAME
Exit If ABORT
Next
End If
If DI=2
For FCC=0 To FRMN-1
FC=Abs(FCC*2-(FRMN-1))
Gosub CALCFRAME
Exit If ABORT
Next
End If
If DI=3
For FCC=0 To FRMN-1
FC=(FRMN-1)-Abs(FCC*2-(FRMN-1))
Gosub CALCFRAME
Exit If ABORT
Next
End If
Erase 9
Screen Close 2
Screen Show 0 : Screen Show 1
Screen 0
Return
CALCFRAME:
If Inkey$=Chr$(27) or Mouse Key<>0 Then ABORT=1
If BACKPIC=0
Cls
Else
Screen Copy 3 To 2
End If
If PREVIEW
Home : Pen Extension_8_1504($FFF) : Paper Extension_8_1504(0)
Print "Frame "+ Extension_8_0EB8(PIC+1,4)+" of "+ Extension_8_0EB8(FRMN,4)+"."
End If
If ACCL=0
POS=FC : MPOS=FRMN-1
End If
If ACCL=1
MPOS=(FRMN-1)*16
POS=Sqr(MPOS*MPOS-(MPOS-FC*16)*(MPOS-FC*16))
End If
If ACCL=2
MPOS=(FRMN-1)*16
POS=MPOS-Sqr(MPOS*MPOS-(FC*FC*256))
End If
RPOS=MPOS-POS
On EFX Gosub EXBLOSION,EXBLOSION,SCRPAGEL,SCRPAGER,SCRPAGEU,SCRPAGED,PIXELIZE
If PREVIEW=0
Save Iff FANI$+ Extension_8_0EB8(PIC+BPIC,4)
Else
Home : Pen Extension_8_1504($FFF)
Print "Frame "+ Extension_8_0EB8(PIC+1,4)+" of "+ Extension_8_0EB8(FRMN,4)+"."
End If
Inc PIC
Return
EXBLOSIONINIT:
Reserve As Work 9,PIEX*PIEY*4
ST=Start(9)
For Y=0 To PIEY-1
For X=0 To PIEX-1
DX=(SCX/2)-(SCX*X)/PIEX
DY=(SCY/2)-(SCY*Y)/PIEY
If EFX=2 Then DX=-DX : DY=-DY
ARC[DX,DY] : W=Param
A=(W*(100-ZUF)+(Rnd(1023)-512)*ZUF)/100
XX=(SCX*X)/PIEX+ Extension_8_1114(A,RAD)
YY=(SCY*Y)/PIEY+ Extension_8_1106(A,RAD)
Doke ST,XX : Doke ST+2,YY : Add ST,4
Next
Next
Return
NI:
Return
EXBLOSION:
ST=Start(9)
For Y=0 To PIEY-1
For X=0 To PIEX-1
X1=(SCX*X)/PIEX : Y1=(SCY*Y)/PIEY
X2= Extension_8_0BE4(ST) : Y2= Extension_8_0BE4(ST+2) : Add ST,4
XX=(X1*RPOS+X2*POS)/MPOS
YY=(Y1*RPOS+Y2*POS)/MPOS
If((X1*3+Y1*7) and 255)>((POS*256)/MPOS) Then T=1 Else T=0
SX=((((SCX*(X+1))/PIEX)-X1)*RPOS)/MPOS+T
SY=((((SCY*(Y+1))/PIEY)-Y1)*RPOS)/MPOS+T
Screen Copy 1,X1,Y1,X1+SX,Y1+SY To 2,XX,YY
Next
Next
Return
SCRPAGEL:
OX=0
For X=0 To SCX-1
XT=((SCX+RAD)*POS)/MPOS-RAD
If X<=XT
YY=0 : XX=X
Else
A=X-XT
XX=X-((A*A)/(RAD*4))
If XX<OX-1
XX=OX-1
End If
YY=Max((XT-X)/4,-RAD)
End If
OX=XX
Screen Copy 1,X,0,X+1,SCY To 2,XX,YY
Next
Return
SCRPAGER:
OX=0
For X=0 To SCX-1
XT=((SCX+RAD)*POS)/MPOS-RAD
If X<=XT
YY=0 : XX=X
Else
A=X-XT
XX=X-((A*A)/(RAD*4))
If XX<OX-1
XX=OX-1
End If
YY=Max((XT-X)/4,-RAD)
End If
OX=XX
Screen Copy 1,SCX-X-1,0,SCX-X,SCY To 2,SCX-XX-1,YY
Next
Return
SCRPAGEU:
OY=0
For Y=0 To SCY-1
YT=((SCY+RAD)*POS)/MPOS-RAD
If Y<=YT
XX=0 : YY=Y
Else
A=Y-YT
YY=Y-((A*A)/(RAD*4))
If YY<OY-1
YY=OY-1
End If
XX=Max((YT-Y)/4,-RAD)
End If
OY=YY
Screen Copy 1,0,Y,SCX,Y+1 To 2,XX,YY
Next
Return
SCRPAGED:
OY=0
For Y=0 To SCY-1
YT=((SCY+RAD)*POS)/MPOS-RAD
If Y<=YT
XX=0 : YY=Y
Else
A=Y-YT
YY=Y-((A*A)/(RAD*4))
If YY<OY-1
YY=OY-1
End If
XX=Max((YT-Y)/4,-RAD)
End If
OY=YY
Screen Copy 1,0,SCY-Y-1,SCX,SCY-Y To 2,XX,SCY-YY-1
Next
Return
PIXELIZE:
SX=(SCX*RPOS)/MPOS
SY=(SCY*RPOS)/MPOS
For Y=0 To SY-1
For X=0 To SX-1
DX= Extension_8_1114((POS*4096)/MPOS,RAD)
DY= Extension_8_1106((POS*4096)/MPOS,RAD)
If SX>0 and SY>0
X1=(SCX*X)/SX
Y1=(SCY*Y)/SY
X2=(SCX*(X+1))/SX
Y2=(SCY*(Y+1))/SY
Else
X1=0 : Y1=0
X2=SCX-1 : Y2=SCY-1
End If
Screen 1
P= Extension_8_039E(Max(Min(X1+DX,SCX-1),0),Max(Min(Y1+DY,SCY-1),0))
Screen 2
If X2-X1<2 and Y2-Y1<2
Extension_8_0388 X1,Y1,P
Else
If X2-X1<2
Extension_8_1016 X1,Y1 To X1,Y2,P
Else
If Y2-Y1<2
Extension_8_1016 X1,Y1 To X2,Y1,P
Else
Ink P : Bar X1,Y1 To X2-1,Y2-1
End If
End If
End If
Next
Next
Return
VIEBACKGROUND:
If BACKPIC=0 Then Return
If MAINPIC Then Screen Hide 1
Screen Show 3 : Screen To Front 3
Screen Display 3,128,40,SCX,SCY
Repeat
Multi Wait
Until Mouse Key<>0 or Inkey$<>""
Screen Hide 3
If MAINPIC Then Screen Show 1
While Mouse Key : Multi Wait : Wend
Return
BACKTOMAIN:
If BACKPIC=0 or MAINPIC=0 Then Return
Screen Copy 3 To 1
Return
DELBACK:
If BACKPIC=0 Then Return
Screen Close 3
BACKPIC=0
Return
ANIPLAYBACK:
FILEREQ[-1,480,160,-1,"Select base picture", Extension_8_02F0(FANI$)+"0000", Extension_8_03E0(FANI$),"#?0000","Play","Abort","","P"]
Screen 0
If Param$="" Then Return
FANI$=Param$-"0000"
If Exist(FANI$+"0000")=0
REQUEST["Can't find first picture!","Argl"]
Return
End If
PIC=0
Screen Hide 0 : If MAINPIC Then Screen Hide 1
Load Iff FANI$+"0000",2
Double Buffer : Autoback 0
Do
Exit If Mouse Key<>0 or Inkey$<>""
If Exist(FANI$+ Extension_8_0EB8(PIC,4))=0 Then PIC=0
Load Iff FANI$+ Extension_8_0EB8(PIC,4)
Multi Wait : Screen Swap
Inc PIC
Loop
Screen Close 2
Screen Show 0 : If MAINPIC Then Screen Show 1
Screen 0
Return
LOAIFF:
FILEREQ[-1,480,160,-1,"Select an iff picture", Extension_8_02F0(FIFF$), Extension_8_03E0(FIFF$),"","Load","Abort","","P"]
If Param$="" Then Return
FIFF$=Param$
If Exist(FIFF$)=0
REQUEST["File does not exist!","Sorry."]
Return
End If
Trap Load Iff FIFF$,1
If Errtrap
REQUEST["Error while loading iff file!","What a pity :-("]
MAINPIC=0
Trap Screen Close 1
Return
End If
SCX=Screen Width : SCY=Screen Height : SCC=Screen Colour
SCR=Screen Mode
Screen Display 1,128,125,SCX,SCY
If SCC=4096
REQUEST["Can't use HAM pictures!","What a pity :-("]
MAINPIC=0
Screen Close 1
Return
End If
MAINPIC=1
Screen 0
Return
LOABACKGROUND:
If MAINPIC=0 Then REQUEST["Load a main picture first!","Ok"] : Return
FILEREQ[-1,480,160,-1,"Select an iff file as background picture", Extension_8_02F0(FIFF$), Extension_8_03E0(FIFF$),"","Load","Abort","","P"]
If Param$="" Then Return
FIFF$=Param$
If Exist(FIFF$)=0
REQUEST["File does not exist!","Sorry."]
Return
End If
Trap Load Iff FIFF$,2
If Errtrap
REQUEST["Error while loading iff file!","What a pity :-("]
Return
End If
BSCX=Screen Width : BSCY=Screen Height : BSCC=Screen Colour
BSCR=Screen Mode
Screen Display 2,128,125,BSCX,BSCY
If BSCC=4096
REQUEST["Can't use HAM pictures!","What a pity :-("]
BACKPIC=0
Screen Close 2
Return
End If
Screen 0
REQUEST["Remap picture to foreground palette?","Yes|No"]
If Param=0
If SCC>16
Screen Open 3,SCX,SCY,SCC,SCR
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
Screen Display 3,128,125,BSCX,BSCY
Get Palette 1
Else
REQUEST["Change number of colors to 32?","Yes|No"]
If Param=1
Screen Open 3,SCX,SCY,SCC,SCR
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
Screen Display 3,128,125,BSCX,BSCY
Get Palette 1
Else
Screen Open 3,SCX,SCY,32,SCR
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
Screen Display 3,128,125,BSCX,BSCY
Get Palette 1
Screen Copy 1 To 3
Screen Open 1,SCX,SCY,32,SCR
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
Get Palette 3
Screen Display 1,128,125,SCX,SCY
Screen Copy 3 To 1
Screen To Front 3
Screen 3
Cls
P=SCC : THRES=10
For THRES=10 To 1 Step -1
For A=0 To BSCC-1
Screen 2 : C0=Colour(A)
C0R= Extension_8_03B2(C0)
C0G= Extension_8_03C0(C0)
C0B= Extension_8_03D0(C0)
Screen 3 : D=48
For B=0 To P
C1=Colour(B)
C1R= Extension_8_03B2(C1)
C1G= Extension_8_03C0(C1)
C1B= Extension_8_03D0(C1)
D=Min(D,Abs(C1R-C0R)+Abs(C1G-C0G)+Abs(C1B-C0B))
Next
If D>THRES : Colour P,C0 : Inc P : End If
Exit If P>31,2
Next
Next
SCC=32
Screen 1 : Get Palette 3
End If
End If
Screen Display 3,128,125,SCX,SCY
Screen Hide 2
For Y=0 To SCY-1
For X=0 To SCX-1
Screen 2 : C=Colour(Max( Extension_8_039E(X,Y),0))
Screen 3 : Extension_8_0388 X,Y, Extension_8_1504(C)
Next
Next
Else
Screen Open 3,SCX,SCY,SCC,SCR
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
Get Palette 1
Screen Display 3,128,125,SCX,SCY
Screen Hide 2
Screen Copy 2 To 3
End If
Screen Close 2
Screen Hide 3 : BACKPIC=1
Screen 0
Return
KILGADS:
For A=25 To 60
DISGAD[A]
Next
Return
DITHER:
Data $0,$8,$2,$A
Data $C,$4,$E,$6
Data $3,$B,$1,$9
Data $E,$7,$D,$5
Data $5,$C,$E,$3
Data $8,$0,$6,$A
Data $D,$2,$4,$E
Data $7,$B,$9,$1
Procedure ARC[DX,DY]
If DX<>0
W=(Atan(((DY*256)/DX)/256.0)*1024.0)/360
Else
If DY<0
W=256
Else
W=768
End If
End If
If DX>0 Then Add W,512
End Proc[W]
Procedure FILEREQNOTIFY
Shared FIL$()
FIL$(0)=""
End Proc
Procedure FILEREQ[SN,SX,SY,YP,T$,F$,D$,PAT$,OK$,FAIL$,FON$,OP$]
FF$=Fsel$(D$,F$,T$,"")
Pop Proc[FF$]
Shared FIL$(),MXFILES
OTH=TH : OLDSCR=Screen
Gosub INIT
Gosub SETUPSCREEN
Gosub REFRESH
Multi Wait : Limit Mouse
OMK=0 : EXA=0 : ENT=0
Do
If Timer>25 and RDIR=1
Sort FIL$(0)
Gosub REFRESH
Timer=0
End If
Repeat
If RDIR Then Gosub EXAMINDIR Else Multi Wait
Until Amos Here
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
If MK=2 Then Gosub DEVLIST
If I$<>"" and ENT>0
STRGAD[ENT,I$]
If Param=-1
If ENT=6
F$=Mid$(FB$(6),2) : BT=4
FIL$(0)= Extension_8_08C4(FILOFF)+ Extension_8_08C4(MXNAMLEN)+RDIR$
Exit
End If
If ENT=7
DD$=D$
D$=Mid$(FB$(7),2)
If Exist(D$)
Gosub NEWREAD
Else
REQUEST["Directory "+D$+" not found!","Oh sorry!"]
D$=DD$
NEWTEX[7,"{"+D$]
End If
End If
If ENT=8
PAT$=Mid$(FB$(8),2)
Gosub NEWREAD
End If
ENT=0
End If
End If
BT=0
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,1,15]
BT=Param
End If
If BT and ENT Then NEWTEX[ENT,FB$(ENT)] : ENT=0
If BT=1 Then Gosub DRAGSCREEN
If BT=11 Then Gosub SELECT
If BT=2 or BT=4 or BT=5
If RDIR
FIL$(0)=""
Else
FIL$(0)= Extension_8_08C4(FILOFF)+ Extension_8_08C4(MXNAMLEN)+RDIR$
End If
Exit
End If
If BT=3 Then Amos To Back
If BT>5 and BT<9 Then ENT=BT : STRGAD[BT,""]
If BT=9 Then Gosub DEVLIST
If BT=10 Then Gosub PARDIR
If BT=12 Then Gosub DRAGSLIDER
If BT=13 Then Gosub ARROWUP
If BT=14 Then Gosub ARROWDOWN
If BT=15 Then Gosub FLIPPAGE
OMK=MK
Loop
Screen Close SN
For A=1 To 15
DISGAD[A]
Next
If BT=4 Then A$= Extension_8_03EC(D$)+F$ Else A$=""
TH=OTH
Trap Screen OLDSCR
Trap Limit Mouse
Pop Proc[A$]
INIT:
If SN<0
For A=0 To 7
Trap Screen A
If Errtrap : SN=A : Exit : End If
Next
End If
If T$="" Then T$="AMCAF File Selector"
If D$="" Then D$= Extension_8_03E0(Dir$)
If Instr(OP$,"P") Then PAT=1 Else PAT=0
If Instr(OP$,"R") Then FIL$(0)=""
If Instr(OP$,"D") Then DIONLY=1 Else DIONLY=0
If Instr(OP$,"Q") Then QUICK=1 Else QUICK=0
If Instr(OP$,"S") Then SAVREQ=1 Else SAVREQ=0
KICK=Deek(Leek(4)+20)
If KICK<37 Then PAT=0
SX=Max(Min((SX+15) and $FFE0,640),160)
SY=Max(Min(SY,256),96)
If YP<40 Then YP=168-SY/2
If FIL$(0)<>""
RDIR$=Mid$(FIL$(0),5)
If D$<>RDIR$
FIL$(0)=""
RDIR=1 : NUMFIL=0 : FILOFF=0 : SELFIL=-1
Return
Else
SELFIL=-1
FILOFF= Extension_8_098C(FIL$(0))
End If
For A=1 To MXFILES
Exit If FIL$(A)=Chr$(255)
Next
NUMFIL=A-1
MXNAMLEN= Extension_8_098C(Mid$(FIL$(0),3))
RDIR=0
Else
RDIR=1 : NUMFIL=0 : FILOFF=0 : SELFIL=-1
MXNAMLEN=0
End If
Return
SETUPSCREEN:
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display SN,288-SX/4,YP,SX,SY
If FON$<>""
A=Val(Left$(FON$,2))
If A>0
Trap Extension_8_05B0 Mid$(FON$,3),A
If Errtrap=0
TH=A
End If
End If
End If
Gr Writing 0
DEFCLOWIN[2,0,0]
FILBOX[0,TH+3,SX-1,SY-1,0]
DEFTEX[1,19,0,SX-24,TH+2,"{"+T$,3]
DEFSCRTBK[3,SX-23,0]
A=Text Length("Pattern:")+8
If DIONLY=0
DEFTEX[6,A,SY-TH*2-9,SX-5,SY-TH-7,"{"+F$,7]
TEX[4,FB(6,1),FB(6,0),FB(6,3),"}File:"]
FY2=SY-TH*3-13
Else
FY2=SY-TH*2-9
End If
DEFTEX[7,A,FY2,SX-5,FY2+TH+2,"{"+D$,7]
TEX[4,FB(7,1),FB(7,0),FB(7,3),"}Dir:"]
If PAT
DEFTEX[8,A,FY2-TH-4,SX-5,FY2-2,"{"+PAT$,7]
TEX[4,FB(8,1),FB(8,0),FB(8,3),"}Pattern:"]
FY2=FB(8,1)-2
Else
FY2=FB(7,1)-2
End If
DEFTEX[4,4,SY-TH-5,SX/4-2,SY-3,OK$,1]
DEFTEX[9,SX/4+1,SY-TH-5,SX/2-3,SY-3,"Devices",1]
DEFTEX[10,SX/2,SY-TH-5,SX/2+SX/4-4,SY-3,"Parent",1]
If Right$(D$,1)=":" Then DEAGAD[10]
DEFTEX[5,SX/2+SX/4-1,SY-TH-5,SX-5,SY-3,FAIL$,1]
DEFARROWU[13,SX-22,FY2-17]
DEFARROWD[14,SX-22,FY2-8]
D=(FY2-TH-9)
MXLIN=D/TH
FY1=TH+7+(D-TH*MXLIN)/2
DEFBOX[15,SX-22,TH+5,SX-5,FY2-18,3]
DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
Return
PARDIR:
If Right$(D$,1)=":" Then Return
If RDIR Then Extension_8_0660
D$= Extension_8_03E0(D$)
Gosub NEWREAD
Return
NEWREAD:
If RDIR Then Extension_8_0660
NEWTEX[7,"{"+D$]
EXA=0 : RDIR=1 : Gosub EXAMINDIR
If Right$(D$,1)=":" Then DEAGAD[10] Else ACTGAD[10]
ACTGAD[9]
Return
DEVLIST:
If RDIR=1 or Left$(FIL$(NUMFIL),1)=>"A" Then Return
FILOFF=NUMFIL
F$=Dev First$("")
While NUMFIL<MXFILES and(F$<>"")
F$=Mid$(F$,2,Instr(F$,":")-1)
TYP= Extension_8_02D0(F$)
If TYP=0
MXNAMLEN=Max(MXNAMLEN,Len(F$))
Request Off
Trap Extension_8_0672 F$
A=Errtrap
Request On
If A=0
NAM$= Extension_8_06D8
SOR$="A"+Upper$(F$)+Chr$(0)+" <Dev> "+F$+Chr$(0)+" ("+NAM$+") "
Else
SOR$="A"+Upper$(F$)+Chr$(0)+" <Dev> "+F$+Chr$(0)+" "+ Extension_8_0522( Extension_8_0532 )
End If
Inc NUMFIL
FIL$(NUMFIL)=SOR$
End If
If TYP=1
MXNAMLEN=Max(MXNAMLEN,Len(F$))
Inc NUMFIL
FIL$(NUMFIL)="B"+Upper$(F$)+Chr$(0)+" <Dir> "+F$+Chr$(0)+" Assign"
End If
F$=Dev Next$
Wend
Sort FIL$(0)
FILOFF=Min(FILOFF,NUMFIL-MXLIN)
Gosub REFRESH
DEAGAD[9]
Return
SELECT:
Y=YM-FY1
If Y<0 or Y>=FY1+MXLIN*TH Then Return
F=Y/TH+FILOFF+1
If F>NUMFIL Then Return
TYP=Asc(FIL$(F))
A$=Peek$(Varptr(FIL$(F))+Instr(FIL$(F),Chr$(0))+8,40,Chr$(0))
If TYP=32
D$= Extension_8_03EC(D$)+A$
Gosub NEWREAD
End If
If TYP=45
F$=A$
NEWTEX[6,"{"+F$]
If SELFIL<>F
If SELFIL-FILOFF=>0 and SELFIL-FILOFF<=MXLIN
A=SELFIL-FILOFF-1 : SELFIL=-1
Gosub LISTFILE
End If
SELFIL=F : A=SELFIL-FILOFF-1 : Timer=0
Gosub LISTFILE
Else
If Timer<50 and SAVREQ=0
BT=4
End If
End If
End If
If TYP=65 or TYP=66
D$=A$ : Gosub NEWREAD
End If
Return
DRAGSCREEN:
PUSHGAD[BT]
A=YM
Limit Mouse X Hard(0),40+A To X Hard(SX-1),296-SY+A
Repeat
If RDIR : Gosub EXAMINDIR : Else Multi Wait : End If
YM=Y Screen(Y Mouse)-A : MK=Mouse Key : I$=Inkey$
Add YP,YM
Screen Display SN,,YP,,
Until MK<>1
Multi Wait : Limit Mouse
OMK=1
RELEGAD[BT]
Return
ARROWUP:
PUSHGAD[BT]
Repeat
Multi Wait
MK=Mouse Key : I$=Inkey$
If FILOFF>0
Dec FILOFF
Gosub SCROLFILES
End If
Until MK<>1
RELEGAD[BT]
Return
ARROWDOWN:
PUSHGAD[BT]
Repeat
Multi Wait
MK=Mouse Key : I$=Inkey$
If FILOFF<NUMFIL-MXLIN
Inc FILOFF
Gosub SCROLFILES
End If
Until MK<>1
RELEGAD[BT]
Return
DRAGSLIDER:
DISGAD[12]
O=YM-FB(12,1)
Repeat
Multi Wait
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
DRAGSLIDER[15,YM-O,MXLIN,NUMFIL,12]
If NUMFIL>MXLIN
FILOFF=Param
Gosub SCROLFILES
End If
Until MK<>1
ENAGAD[12]
DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
OMK=1
Return
REFRESH:
DEFBOX[11,4,TH+5,SX-25,FY2,7]
If NUMFIL>0
For A=0 To Min(MXLIN-1,NUMFIL-1)
Gosub LISTFILE
Next
OLDOFF=FILOFF
End If
If FB(12,4) and 1 Then DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
Return
SCROLFILES:
If OLDOFF=FILOFF Then Return
X1=FB(11,0)+2 : X2=FB(11,2)-2 : Y1=FY1+1 : Y2=FY1+TH*MXLIN+1
D=FILOFF-OLDOFF
If Abs(D)>MXLIN-2 Then Gosub REFRESH : Return
If D>0
Screen Copy SN,X1,Y1+D*TH,X2,Y2 To SN,X1,Y1
For A=MXLIN-D To MXLIN-1
Gosub LISTFILE
Next
Else
Screen Copy SN,X1,Y1,X2,Y2+D*TH To SN,X1,Y1-D*TH
For A=0 To -D-1
Gosub LISTFILE
Next
End If
OLDOFF=FILOFF
If FB(12,4) and 1 Then DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
Return
FLIPPAGE:
If NUMFIL<MXLIN Then Return
If YM>(FB(12,1)+FB(12,3))/2
FILOFF=Min(FILOFF+MXLIN,NUMFIL-MXLIN)
Else
FILOFF=Max(FILOFF-MXLIN,0)
End If
Gosub REFRESH
DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
Return
LISTFILE:
If QUICK
A$=FIL$(A+FILOFF+1)
A$=Peek$(Varptr(A$)+Instr(A$,Chr$(0)),40,Chr$(0))
Else
A$=FIL$(A+FILOFF+1)
B$=Mid$(A$,Instr(A$,Chr$(0))+1)
FIL$=Left$(B$,Instr(B$,Chr$(0))-1)
RES$=Mid$(B$,Len(FIL$)+2)
A$=FIL$+Space$(MXNAMLEN-(Len(FIL$)-8))+RES$
End If
If Asc(FIL$(A+FILOFF+1))<>45
TEX2[6,FY1+A*TH,SX-28,FY1+(A+1)*TH+1,"{"+A$]
Else
TEX[6,FY1+A*TH,SX-28,FY1+(A+1)*TH+1,"{"+A$]
End If
If A+FILOFF+1=SELFIL
Gr Writing 2
Ink 2 : Bar 8,FY1+A*TH+1 To SX-29,FY1+(A+1)*TH
Gr Writing 0
End If
Return
EXAMINDIR:
If EXA=0
FILOFF=0 : NUMFIL=0 : MXNAMLEN=5 : RDIR$=D$
SELFIL=-1
For A=1 To MXFILES
FIL$(A)=Chr$(255)
Next
Trap Extension_8_063A D$
If Errtrap=0
EXA=1 : Timer=0
Else
Gosub REFRESH
REQUEST[ Extension_8_0522( Extension_8_0532 )+"!","Cancel"]
RDIR=0 : Return
End If
End If
If NUMFIL=MXFILES
Extension_8_0660
Sort FIL$(0)
RDIR=0
Gosub REFRESH
Return
End If
FIL$= Extension_8_064C
If FIL$=""
Sort FIL$(0)
Timer=0 : RDIR=0 : Gosub REFRESH
Return
End If
TYP= Extension_8_0688
If QUICK=0
DATE$=Mid$( Extension_8_0F0A( Extension_8_06F4 ),4)+" "+ Extension_8_0F1A( Extension_8_070E )
COM$= Extension_8_0762
FLAG$= Extension_8_0728( Extension_8_0742 )
End If
If TYP<0
If DIONLY=0
If KICK>36
A= Extension_8_0300(FIL$,PAT$)
Else
A=-1
End If
Else
A=0
End If
If A
MXNAMLEN=Max(MXNAMLEN,Len(FIL$))
SIZE$= Extension_8_0EC8( Extension_8_06A2 ,7)
Inc NUMFIL
If QUICK
FIL$(NUMFIL)="-"+Upper$(FIL$)+Chr$(0)+SIZE$+" "+FIL$+Chr$(0)
Else
SOR$="-"+Upper$(FIL$)+Chr$(0)+SIZE$+" "+FIL$+Chr$(0)+DATE$+" "+FLAG$+" "+COM$
FIL$(NUMFIL)=SOR$
End If
End If
Else
MXNAMLEN=Max(MXNAMLEN,Len(FIL$))
Inc NUMFIL
If QUICK
FIL$(NUMFIL)=" "+Upper$(FIL$)+Chr$(0)+" <Dir> "+FIL$+Chr$(0)
Else
SOR$=" "+Upper$(FIL$)+Chr$(0)+" <Dir> "+FIL$+Chr$(0)+DATE$+" "+FLAG$+" "+COM$
FIL$(NUMFIL)=SOR$
End If
End If
Return
End Proc
Procedure REQUEST[T$,OP$]
Dim LIN$(20)
OPT=1 : OTH=TH
For A=1 To Len(OP$)
If Mid$(OP$,A,1)="|" Then Inc OPT
Next
If Screen=-1
TH=8
SX=Max(Len(OP$)*8+OPT*32+8+15,320) and $FE0
LPR=SX/8-2
Else
SX=Max(Text Length(OP$)+OPT*32+8+15,320) and $FE0
LPR=SX/Text Length("M")-2
End If
LI=0 : LP=1 : LILE=0
For A=1 To Len(T$)
P=Asc(Mid$(T$,A,1))
Inc LILE
If LILE>LPR
LIN$(LI)=Mid$(T$,LP,SP-LP+1)
LP=SP+2 : LILE=A-LP
Inc LI
End If
If P=32 Then SP=A-1
If P=167 Then LILE=LPR+2 : SP=A-1
Next
LIN$(LI)=Mid$(T$,LP) : Inc LI
NBLI=LI-1
SY=32+LI*TH
If Screen=-1
SN=0
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
OLDSCR=-1
XP=0 : YP=0
Else
If Screen Height<SY+4 or Screen Width<SX+16 or Screen Colour<4
OLDSCR=Screen
For A=0 To 7
Trap Screen A
If Errtrap : SN=A : Exit : End If
Next
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Get Palette OLDSCR
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
XP=0 : YP=0
Else
XP=(Screen Width-SX)/2
YP=(Screen Height-SY)/2
SN=-1
Get Cblock 9,XP-4,YP-2,SX+16,SY+4
DRABOX[XP-4,YP-2,XP+SX+3,YP+SY+1,0]
DRABOX[XP-2,YP-1,XP+SX+1,YP+SY,1]
Limit Mouse X Hard(XP),Y Hard(YP) To X Hard(XP+SX-1),Y Hard(YP+SY-1)
End If
End If
FILBOX[XP,YP,XP+SX-1,YP+SY-1,0]
For A=0 To NBLI
TEX[XP+4,YP+4+A*TH,XP+SX-5,YP+12+A*TH,LIN$(A)]
Next
OP=0
For A=1 To OPT
NP=Instr(OP$,"|",OP+1) : If NP=0 Then NP=Len(OP$)+1
T$=Mid$(OP$,OP+1,NP-OP-1)
X1=XP+4+((A-1)*(SX-6))/OPT
X2=XP+1+(A*(SX-6))/OPT
DEFTEX[15+A,X1,YP+SY-TH-14,X2,YP+SY-3,T$,1]
OP=NP
Next
OMK=0
Do
Repeat : Multi Wait : Until Amos Here
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
BT=0
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,16,15+OPT]
BT=Param
End If
Exit If BT
OMK=MK
Loop
For A=1 To OPT
DISGAD[15+A]
Next
Limit Mouse
If SN>-1
Screen Close SN
If OLDSCR>-1
Screen OLDSCR
End If
Else
Put Cblock 9
Del Cblock 9
End If
TH=OTH
End Proc[BT-16]
Procedure NUMENT[T$,OP$,DEFNUM,LOWER,UPPER]
Dim LIN$(10)
OPT=1 : OTH=TH
For A=1 To Len(OP$)
If Mid$(OP$,A,1)="|" Then Inc OPT
Next
If Screen=-1
TH=8
SX=Max(Len(OP$)*8+OPT*32+8+15,320) and $FE0
LPR=SX/8-2
Else
SX=Max(Text Length(OP$)+OPT*32+8+15,320) and $FE0
LPR=SX/Text Length("M")-2
End If
LI=0 : LP=1 : LILE=0
For A=1 To Len(T$)
P=Asc(Mid$(T$,A,1))
Inc LILE
If LILE>LPR
LIN$(LI)=Mid$(T$,LP,SP-LP+1)
LP=SP+2 : LILE=A-LP
Inc LI
End If
If P=32 Then SP=A-1
If P=167 Then LILE=LPR+2 : SP=A-1
Next
LIN$(LI)=Mid$(T$,LP) : Inc LI
NBLI=LI-1
SY=48+LI*TH
If Screen=-1
SN=0
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
OLDSCR=-1
XP=0 : YP=0
Else
If Screen Height<SY or Screen Width<SX or Screen Colour<4
For A=0 To 7
Trap Screen A
If Errtrap : SN=A : Exit : End If
Next
OLDSCR=Screen
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Get Palette OLDSCR
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
XP=0 : YP=0
Else
XP=(Screen Width-SX)/2
YP=(Screen Height-SY)/2
SN=-1
Get Cblock 9,XP-4,YP-2,SX+16,SY+4
DRABOX[XP-4,YP-2,XP+SX+3,YP+SY+1,0]
DRABOX[XP-2,YP-1,XP+SX+1,YP+SY,1]
Limit Mouse X Hard(XP),Y Hard(YP) To X Hard(XP+SX-1),Y Hard(YP+SY-1)
End If
End If
FILBOX[XP,YP,XP+SX-1,YP+SY-1,0]
For A=0 To NBLI
TEX[XP+4,YP+4+A*TH,XP+SX-5,YP+12+A*TH,LIN$(A)]
Next
DEFTEX[16,XP+4,YP+SY-TH*2-18,XP+SX-5,YP+SY-TH-16,"{"+Mid$(Str$(DEFNUM),2),7]
OP=0
For A=1 To OPT
NP=Instr(OP$,"|",OP+1) : If NP=0 Then NP=Len(OP$)+1
T$=Mid$(OP$,OP+1,NP-OP-1)
X1=XP+4+((A-1)*(SX-6))/OPT
X2=XP+1+(A*(SX-6))/OPT
DEFTEX[16+A,X1,YP+SY-TH-14,X2,YP+SY-3,T$,1]
OP=NP
Next
OMK=0
STRGAD[16,""]
Do
Repeat : Multi Wait : Until Amos Here
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
BT=17
If I$<>""
If I$<" " or(I$>="0" and I$<="9")
If Not(I$="0" and NUM=0)
STRGAD[16,I$]
Exit If Param=-1
End If
End If
End If
NUM=Val(Mid$(FB$(16),2))
If NUM<LOWER
NUM=LOWER
NEWTEX[16,"{"+Mid$(Str$(NUM),2)]
STRGAD[16,""]
End If
If NUM>UPPER
NUM=UPPER
NEWTEX[16,"{"+Mid$(Str$(NUM),2)]
STRGAD[16,""]
End If
BT=0
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,16,16+OPT]
BT=Param
End If
Exit If BT>16
OMK=MK
Loop
For A=1 To OPT+1
DISGAD[15+A]
Next
Limit Mouse
If SN>-1
Screen Close SN
If OLDSCR>-1
Screen OLDSCR
End If
Else
Put Cblock 9
Del Cblock 9
End If
TH=OTH
A$= Extension_8_0EB8(BT-17,1)+Mid$(Str$(NUM),2)
End Proc[A$]
Procedure TXTENT[T$,OP$,DEFTXT$,NUMLET]
Dim LIN$(10)
OPT=1 : OTH=TH
For A=1 To Len(OP$)
If Mid$(OP$,A,1)="|" Then Inc OPT
Next
If Screen=-1
TH=8
SX=Max(Len(OP$)*8+OPT*32+8+15,320) and $FE0
LPR=SX/8-2
Else
SX=Max(Text Length(OP$)+OPT*32+8+15,320) and $FE0
LPR=SX/Text Length("M")-2
End If
LI=0 : LP=1 : LILE=0
For A=1 To Len(T$)
P=Asc(Mid$(T$,A,1))
Inc LILE
If LILE>LPR
LIN$(LI)=Mid$(T$,LP,SP-LP+1)
LP=SP+2 : LILE=A-LP
Inc LI
End If
If P=32 Then SP=A-1
If P=167 Then LILE=LPR+2 : SP=A-1
Next
LIN$(LI)=Mid$(T$,LP) : Inc LI
NBLI=LI-1
SY=48+LI*TH
If Screen=-1
SN=0
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
OLDSCR=-1
XP=0 : YP=0
Else
If Screen Height<SY or Screen Width<SX or Screen Colour<4
For A=0 To 7
Trap Screen A
If Errtrap : SN=A : Exit : End If
Next
OLDSCR=Screen
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Get Palette OLDSCR
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
XP=0 : YP=0
Else
XP=(Screen Width-SX)/2
YP=(Screen Height-SY)/2
SN=-1
Get Cblock 9,XP-4,YP-2,SX+16,SY+4
DRABOX[XP-4,YP-2,XP+SX+3,YP+SY+1,0]
DRABOX[XP-2,YP-1,XP+SX+1,YP+SY,1]
Limit Mouse X Hard(XP),Y Hard(YP) To X Hard(XP+SX-1),Y Hard(YP+SY-1)
End If
End If
FILBOX[XP,YP,XP+SX-1,YP+SY-1,0]
For A=0 To NBLI
TEX[XP+4,YP+4+A*TH,XP+SX-5,YP+12+A*TH,LIN$(A)]
Next
DEFTEX[16,XP+4,YP+SY-TH*2-18,XP+SX-5,YP+SY-TH-16,"{"+DEFTXT$,7]
OP=0
For A=1 To OPT
NP=Instr(OP$,"|",OP+1) : If NP=0 Then NP=Len(OP$)+1
T$=Mid$(OP$,OP+1,NP-OP-1)
X1=XP+4+((A-1)*(SX-6))/OPT
X2=XP+1+(A*(SX-6))/OPT
DEFTEX[16+A,X1,YP+SY-TH-14,X2,YP+SY-3,T$,1]
OP=NP
Next
OMK=0
STRGAD[16,""]
Do
Repeat : Multi Wait : Until Amos Here
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
BT=17
If I$<>""
STRGAD[16,I$]
Exit If Param=-1
End If
TXT$=Mid$(FB$(16),2)
If Len(TXT$)>NUMLET
NEWTEX[16,"{"+Left$(TXT$,NUMLET)]
STRGAD[16,""]
End If
BT=0
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,16,16+OPT]
BT=Param
End If
Exit If BT>16
OMK=MK
Loop
For A=1 To OPT+1
DISGAD[15+A]
Next
Limit Mouse
If SN>-1
Screen Close SN
If OLDSCR>-1
Screen OLDSCR
End If
Else
Put Cblock 9
Del Cblock 9
End If
TH=OTH
A$= Extension_8_0EB8(BT-17,1)+TXT$
End Proc[A$]
Procedure CHKMOUSE[XM,YM,LL,UL]
For BT=LL To UL
If XM=>FB(BT,0) and XM<=FB(BT,2) and YM=>FB(BT,1) and YM<=FB(BT,3) and(FB(BT,4) and 1) Then Exit
Next
If BT>UL Then Pop Proc[0]
If FB(BT,4) and 2 Then Pop Proc[BT]
OST=-1 : AA=0
ST= Extension_8_093A(FB(BT,4) and 4,2)
Repeat
Multi Wait
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
If XM=>FB(BT,0) and XM<=FB(BT,2) and YM=>FB(BT,1) and YM<=FB(BT,3) Then A=1 Else A=0
If AA<>A Then AA=A : ST=1-ST
If OST<>ST
If ST
PUSHGAD[BT]
Else
RELEGAD[BT]
End If
OST=ST
End If
Until MK<>1
If A=0 Then Pop Proc[0]
If ST
RELEGAD[BT]
Else
PUSHGAD[BT]
End If
End Proc[BT]
Procedure DEFTEX[BT,X1,Y1,X2,Y2,T$,FL]
TEXBOX[X1,Y1,X2,Y2, Extension_8_093A(FL and 4,2),T$]
DEFGAD[BT,X1,Y1,X2,Y2,FL]
FB$(BT)=T$
End Proc
Procedure DEFBOX[BT,X1,Y1,X2,Y2,FL]
FILBOX[X1,Y1,X2,Y2, Extension_8_093A(FL and 4,2)]
DEFGAD[BT,X1,Y1,X2,Y2,FL]
End Proc
Procedure DEFGAD[BT,X1,Y1,X2,Y2,FL]
FB(BT,0)=X1 : FB(BT,1)=Y1
FB(BT,2)=X2 : FB(BT,3)=Y2
FB(BT,4)=FL
FB$(BT)=""
End Proc
Procedure DEAGAD[BT]
If(FB(BT,4) and 1)=0 Then Pop Proc
FB(BT,4)=FB(BT,4) and $FE
Set Pattern 2
Ink 3 : Bar FB(BT,0),FB(BT,1) To FB(BT,2),FB(BT,3)
Set Pattern 0
End Proc
Procedure ACTGAD[BT]
If FB(BT,4) and 1 Then Pop Proc
CLRGAD[BT]
FB(BT,4)=FB(BT,4) or 1
If FB$(BT)<>""
TEXBOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3), Extension_8_093A(FB(BT,4) and 4,2),FB$(BT)]
Else
DRABOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3), Extension_8_093A(FB(BT,4) and 4,2)]
End If
End Proc
Procedure DISGAD[BT]
FB(BT,4)=FB(BT,4) and $FE
End Proc
Procedure ENAGAD[BT]
FB(BT,4)=FB(BT,4) or 1
End Proc
Procedure CLRGAD[BT]
FB(BT,4)=FB(BT,4) and $FE
Ink 2 : Bar FB(BT,0),FB(BT,1) To FB(BT,2),FB(BT,3)
End Proc
Procedure PUSHGAD[BT]
DRABOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3),1]
End Proc
Procedure RELEGAD[BT]
DRABOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3),0]
End Proc
Procedure FILBOX[X1,Y1,X2,Y2,SE]
Ink 2 : Bar X1+2,Y1+1 To X2-2,Y2-1
Extension_8_0388 X1,Y2,2
Extension_8_0388 X2,Y1,2
Ink 1+SE*2 : Draw X1,Y2-1 To X1,Y1 : Draw To X2-1,Y1 : Draw X1+1,Y2-1 To X1+1,Y1
Ink 3-SE*2 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1 : Draw X2-1,Y2 To X2-1,Y1+1
End Proc
Procedure NEWTEX[BT,T$]
FB$(BT)=T$
TEX[FB(BT,0)+1,FB(BT,1),FB(BT,2)-1,FB(BT,3),T$]
End Proc
Procedure TEXBOX[X1,Y1,X2,Y2,SE,T$]
TEX[X1+1,Y1,X2-1,Y2,T$]
Extension_8_0388 X1,Y2,2 : Extension_8_0388 X2,Y1,2
Ink 1+SE*2 : Draw X1,Y2-1 To X1,Y1 : Draw To X2-1,Y1 : Draw X1+1,Y2-1 To X1+1,Y1
Ink 3-SE*2 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1 : Draw X2-1,Y2 To X2-1,Y1+1
End Proc
Procedure TEX[X1,Y1,X2,Y2,T$]
If Asc(T$)=123
M=1 : T$=Mid$(T$,2)
Else
If Asc(T$)=125
M=2 : T$=Mid$(T$,2)
Else
M=0
End If
End If
TL=Text Length(T$)
While TL>(X2-X1)-4
T$=Left$(T$,Len(T$)-1)
TL=Text Length(T$)
Wend
If M=1
X=X1+4 : Y=Y1+1
Else
If M=2
X=X2-Text Length(T$)-2 : Y=Y1+1
Else
X=(X1+X2-TL)/2 : Y=(Y1+Y2-TH+2)/2
End If
End If
If Y2>0 Then Ink 2 : Bar X1+1,Y1+1 To X2-1,Y2-1
Ink 0 : Text X,Y+Text Base,T$
End Proc
Procedure TEX2[X1,Y1,X2,Y2,T$]
If Asc(T$)=123
M=1 : T$=Mid$(T$,2)
Else
If Asc(T$)=125
M=2 : T$=Mid$(T$,2)
Else
M=0
End If
End If
TL=Text Length(T$)
While TL>(X2-X1)-4
T$=Left$(T$,Len(T$)-1)
TL=Text Length(T$)
Wend
If M=1
X=X1+4 : Y=Y1+1
Else
If M=2
X=X2-Text Length(T$)-2 : Y=Y1+1
Else
X=(X1+X2-TL)/2 : Y=(Y1+Y2-TH+1)/2
End If
End If
If Y2>0 Then Ink 2 : Bar X1+1,Y1+1 To X2-1,Y2-1
Ink 1 : Text X,Y+Text Base,T$
End Proc
Procedure DRABOX[X1,Y1,X2,Y2,SE]
Ink 1+SE*2 : Draw X1,Y2-1 To X1,Y1 : Draw To X2-1,Y1 : Draw X1+1,Y2-1 To X1+1,Y1
Ink 3-SE*2 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1 : Draw X2-1,Y2 To X2-1,Y1+1
End Proc
Procedure STRGAD[BT,I$]
Shared POS
A$=FB$(BT)
If I$=""
POS=Len(A$)-1
End If
If I$>Chr$(31) Then A$=Left$(A$,POS+1)+I$+Mid$(A$,POS+2) : Inc POS
If I$=Chr$(8) and POS>0 Then A$=Left$(A$,POS)+Mid$(A$,POS+2) : Dec POS
If I$=Cleft$ and POS>0 Then Dec POS
If I$=Cright$ and POS<Len(A$)-1 Then Inc POS
If I$=Chr$(13)
NEWTEX[BT,A$]
Pop Proc[-1]
End If
NEWTEX[BT,A$]
X1=FB(BT,0)+5+Text Length(Mid$(A$,2,POS)) : Y1=FB(BT,1)+1
X2=X1+Max(Text Length(Mid$(A$,POS+2,1)),4)
If X2<FB(BT,2)-4
Gr Writing 2
Ink 3 : Bar X1,Y1 To X2-1,Y1+TH-1
Gr Writing 0
End If
End Proc[0]
Procedure DEFCLOWIN[BT,X,Y]
DRACLOWIN[X,Y]
DEFGAD[BT,X,Y,X+18,Y+TH+2,1]
End Proc
Procedure DRACLOWIN[X,Y]
FILBOX[X,Y,X+18,Y+TH+2,0]
Ink 0 : Box 7+X,3+Y To 11+X,Y+TH-1
End Proc
Procedure DEFSCRTBK[BT,X,Y]
DRASCRTBK[X,Y]
DEFGAD[BT,X,Y,X+22,Y+TH+2,1]
End Proc
Procedure DRASCRTBK[X,Y]
FILBOX[X,Y,X+22,Y+TH+2,0]
Ink 0 : Box 4+X,2+Y To 14+X,Y+TH/2+2
Ink 2 : Bar 8+X,Y+TH/2 To 18+X,Y+TH
Ink 0 : Box 8+X,Y+TH/2 To 18+X,Y+TH
End Proc
Procedure DEFARROWU[BT,X,Y]
DRAARROWU[X,Y]
DEFGAD[BT,X,Y,X+17,Y+8,3]
End Proc
Procedure DRAARROWU[X,Y]
DRABOX[X,Y,X+17,Y+8,0]
Extension_8_1016 X+4,Y+6 To X+8,Y+2,0
Extension_8_1016 X+5,Y+6 To X+8,Y+3,0
Extension_8_1016 X+9,Y+2 To X+13,Y+6,0
Extension_8_1016 X+9,Y+3 To X+12,Y+6,0
End Proc
Procedure DEFARROWD[BT,X,Y]
DRAARROWD[X,Y]
DEFGAD[BT,X,Y,X+17,Y+8,3]
End Proc
Procedure DRAARROWD[X,Y]
DRABOX[X,Y,X+17,Y+8,0]
Extension_8_1016 X+4,Y+2 To X+8,Y+6,0
Extension_8_1016 X+5,Y+2 To X+8,Y+5,0
Extension_8_1016 X+9,Y+6 To X+13,Y+2,0
Extension_8_1016 X+9,Y+5 To X+12,Y+2,0
End Proc
Procedure DRAPROCBAR[BT,POS,MX]
X1=FB(BT,0)+2 : X2=FB(BT,2)-2 : Y1=FB(BT,1)+1 : Y2=FB(BT,3)-1
DX=X2-X1
PX=X1+(POS*DX)/MX
If PX>X1 and PX<X2
Ink 0 : Bar X1,Y1 To PX,Y2
Ink 2 : Bar PX,Y1 To X2,Y2
End If
If PX=X1 Then Ink 2 : Bar X1,Y1 To X2,Y2
If PX=X2 Then Ink 0 : Bar X1,Y1 To X2,Y2
End Proc
Procedure DRASLIDER[BT,LINOFF,PAG,NUMLIN,NB]
D=(FB(BT,3)-FB(BT,1))-4
Y1=(LINOFF*D)/Max(NUMLIN,PAG)+FB(BT,1)+2
Y2=((LINOFF+PAG)*D)/Max(NUMLIN,PAG)+FB(BT,1)+2
DEFGAD[NB,FB(BT,0)+4,Y1,FB(BT,2)-4,Y2,3]
Ink 2
If Y1>FB(BT,1)+2 Then Bar FB(BT,0)+4,FB(BT,1)+1 To FB(BT,2)-4,Y1-1
If Y2<FB(BT,3)-2 Then Bar FB(BT,0)+4,Y2+1 To FB(BT,2)-4,FB(BT,3)-1
If Y2-Y1>0
Ink 0 : Bar FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2
Else
Extension_8_1016 FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2,0
End If
End Proc
Procedure DRAGSLIDER[BT,Y,PAG,NUMLIN,NB]
Y1=FB(NB,1) : Y2=FB(NB,3) : D=Y2-Y1
Y1=Min(Max(FB(BT,1)+2,Y),FB(BT,3)-2-D)
Y2=Y1+D : FB(NB,1)=Y1 : FB(NB,3)=Y2
Ink 2
If Y1>FB(BT,1)+2 Then Bar FB(BT,0)+4,FB(BT,1)+1 To FB(BT,2)-4,Y1-1
If Y2<FB(BT,3)-2 Then Bar FB(BT,0)+4,Y2+1 To FB(BT,2)-4,FB(BT,3)-1
If Y2-Y1>0
Ink 1 : Bar FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2
Else
Extension_8_1016 FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2,1
End If
D=FB(BT,3)-FB(BT,1)-4
L=Min(((Y1-FB(BT,1)-2)*Max(NUMLIN,PAG)+D/2)/D,NUMLIN-PAG)
End Proc[L]